In [ ]:
    
__author__ = 'Shahariar Rabby'
import email
import imaplib
import ctypes
import getpass
import threading
from playsound import playsound
    
In [ ]:
    
def user():
#     ORG_EMAIL = "@gmail.com"
#     FROM_EMAIL = "your mail" + ORG_EMAIL
#     FROM_PWD = "your pass"
    FROM_EMAIL = raw_input("insert Email : ")+'@gmail.com'
    FROM_PWD = getpass.getpass("input : ")
    return FROM_EMAIL,FROM_PWD
    
In this function we call user details function and get the user name and password, Than we use those details for IMAP login. IMAP (Internet Message Access Protocol) is a standard email protocol that stores email messages on a mail server, but allows the end user to view and manipulate the messages as though they were stored locally on the end user's computing device(s).
In [ ]:
    
def login():
    FROM_EMAIL,FROM_PWD = user()
    mail = imaplib.IMAP4_SSL('imap.gmail.com', 993)
    mail.login(FROM_EMAIL, FROM_PWD)
    mail.select("INBOX")
    print 'Login successful'
    return mail
mail = login()
    
In [ ]:
    
def read_email_from_gmail(mail):
    try:
        type, data = mail.search(None, 'ALL') #Sharching all message frm inbox
        mail_ids = data[0] #Assining all mail id to mail_ids Variable
        id_list = mail_ids.split() #putting all mail id to id_list array
        first_email_id = int(id_list[0]) #getting first mail id
        latest_email_id = int(id_list[-1]) #getting last mail id
        for i in range(latest_email_id, latest_email_id - 10, -1): #this loop reading last 10 message
            typ, data = mail.fetch(i, '(RFC822)') #fatch mail data, and putting it a tuple where i=tuple no and 'RFC822' is mail
            for response_part in data: #reading all data from i no message
                if isinstance(response_part, tuple): 
                    msg = email.message_from_string(response_part[1]) #Reading mail
                    email_subject = msg['subject'] #Email subject
                    email_from = msg['from'] #Sender address
                    print 'From : ' + email_from
                    print 'Subject : ' + email_subject
                    print "Read mail: https://gmail.com\n"
    except Exception, e:
        print (str(e)) #printing if there is any error
    
In [ ]:
    
def Check_Unseen():
    mail.select("INBOX") #Selecting inbox
    n = 0
    (retcode, messages) = mail.search(None, '(UNSEEN)') #sharching unseen mail
    if retcode == 'OK': #if unseen
        for num in messages[0].split():
            n = n + 1 
            print n #print message number
            typ, data = mail.fetch(num, '(RFC822)') #fatching mail
            for response_part in data:
                if isinstance(response_part, tuple):
                    original = email.message_from_string(response_part[1])
                    print original['From']
                    data = original['Subject']
                    playsound('demonstrative.wav') #play sound when mail recive
                    print data
                    print "Read mail: https://gmail.com"
    from sys import stdout
    stdout.write(str('#')) #printing mail server is alive
    
This function call Check_Unseen in every 15 sec.
In [ ]:
    
def server():
    Check_Unseen()
    threading.Timer(15, server).start() #calling function evey 15 sec